package uniandes.cupi2.tweetSpy.interfaz;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jboss.system.server.ServerConfig;
import org.jboss.system.server.ServerConfigLocator;

import uniandes.cupi2.tweetSpy.mundo.TweetSpy;
import uniandes.cupi2.tweetSpy.twitter.ExceptionTwitter;
import uniandes.cupi2.tweetSpy.twitter.LoginTwitter;

//TODO
/**
 * Servlet que se encarga de 
 */
public class ServletInicio extends HttpServlet {

	public final static String RUTA_ARCHIVO_SERIALIZADO = "/tweetSpy.data";

	// -----------------------------------------------------------------
	// Metodos
	// -----------------------------------------------------------------

	/**
	 * Inicializacion del Servlet
	 */
	public void init() throws ServletException {
	}

	public void destroy( ) {
		System.out.println("Destruyendo instancia");
		
		try {
			if (TweetSpy.getInstance() != null) {
				ServerConfig config = ServerConfigLocator.locate();
				File dataDir = config.getServerDataDir();
				File tmp = new File(dataDir + RUTA_ARCHIVO_SERIALIZADO);
				if( !tmp.exists( ) )
				{
					tmp.mkdirs();
				}
				System.out.println("Nombre=" + tmp.getName());
				System.out.println("Path=" + tmp.getPath());
				System.out.println("Abs. Path=" + tmp.getAbsolutePath());

				FileOutputStream fos = new FileOutputStream(tmp);
				ObjectOutputStream oos = new ObjectOutputStream(fos);
				oos.writeObject(TweetSpy.getInstance());
				oos.close();
				fos.close();
				System.out.println("Twitter Serializado");
			}
		} catch (Exception e) {
			System.out.println("Error de persistencia en Servidor");
		}
	}

	/**
	 * Maneja un pedido GET de un cliente 
	 * @param request Pedido del cliente
	 * @param response Respuesta
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// Maneja el GET y el POST de la misma manera
		procesarSolicitud(request, response);
	}

	/**
	 * Maneja un pedido POST de un cliente 
	 * @param request Pedido del cliente
	 * @param response Respuesta
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// Maneja el GET y el POST de la misma manera
		procesarSolicitud(request, response);
	}

	/**
	 * Procesa el pedido de igual manera para todos
	 * @param request Pedido del cliente
	 * @param response Respuesta
	 * @throws IOException Excepcion de error al escribir la respuesta
	 */
	private void procesarSolicitud( HttpServletRequest request, HttpServletResponse response ) throws IOException
	{
		// Envia a la respuesta el encabezado del template
		PrintWriter respuesta = response.getWriter( );
		imprimeEncabezado(respuesta);
		try {
			String url = LoginTwitter.login( );
			imprimirContenido(respuesta, url);
			
		} catch (ExceptionTwitter e) {
			e.printStackTrace( );
			imprimirError(respuesta);
		}
	}

	private void imprimirContenido ( PrintWriter respuesta, String url )
	{
		respuesta.println("<div id=\"wrapper\">");
		respuesta.println("	<form name=\"login-form\" class=\"login-form\" action=\"homePost.htm\" method=\"post\">");
		respuesta.println("		<div class=\"header\">");
		respuesta.println("		<h1>Bienvenido</h1>");
		respuesta.println("		<span>Ingrese al <a href=\"" + url + "\">link</a> y pege el link aqui.</span>");
		respuesta.println("		</div>");
		respuesta.println("		<div class=\"content\">");
		respuesta.println("		<input name=\"pin\" type=\"text\" class=\"input username\" placeholder=\"pin\" />");
		respuesta.println("		<div class=\"user-icon\"></div>");
		respuesta.println("		<input name=\"contrasena\" type=\"password\" class=\"input password\" placeholder=\"password\" />");
		respuesta.println("		<div class=\"pass-icon\"></div>		");
		respuesta.println("		</div>");
		respuesta.println("		<div class=\"footer\">");
		respuesta.println("		<input type=\"submit\" name=\"submit\" value=\"registrase\" class=\"button\" />");
		respuesta.println("		</div>");
		respuesta.println("	</form>");
		respuesta.println("</div>");
		respuesta.println("<div class=\"gradient\"></div>");
		respuesta.println("</body>");
		respuesta.println("</html>");
	}
	
	private void imprimirError ( PrintWriter respuesta )
	{
		respuesta.println("<div id=\"wrapper\">");
		respuesta.println("	<form class=\"login-form\">");
		respuesta.println("		<div class=\"header\">");
		respuesta.println("		<h1>Error</h1>");
		respuesta.println("		<span>No se logro encontrar el link de acceso.</span>");
		respuesta.println("		</div>");
		respuesta.println("	</form>");
		respuesta.println("</div>");
		respuesta.println("<div class=\"gradient\"></div>");
		respuesta.println("</body>");
		respuesta.println("</body>");
		respuesta.println("</html>");}
	
	private void imprimeEncabezado ( PrintWriter respuesta )
	{
		respuesta.println("<!DOCTYPE HTML>");
		respuesta.println("<html>");
		respuesta.println("<head>");
		respuesta.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
		respuesta.println("<title>TweetSpy</title>");
		respuesta.println("<link href=\"style/logeo.css\" rel=\"stylesheet\" type=\"text/css\">");
		respuesta.println("</head>");
		respuesta.println("");
		respuesta.println("<body>");
		respuesta.println("	<div>");
		respuesta.println("		<center>");
		respuesta.println("    		<img src=\"imagenes/mini.png\">");
		respuesta.println("            <img src=\"imagenes/spy.png\" height=\"100px\" width=\"220px\">");
		respuesta.println("    	</center>");
		respuesta.println("	</div>");
	}

}
